package com.fakeDYChat.common.websocket.service;

import com.fakeDYChat.common.websocket.domain.vo.resp.WSBaseResp;
import io.netty.channel.ChannelHandlerContext;
import me.chanjar.weixin.common.error.WxErrorException;

/**
 * 专门用于提供WebSocket服务
 *
 * @author Tang
 * @date 2023/12/9 21:59
 **/
public interface WebSocketService {
    /**
     * 处理登录请求
     *
     * @param ctx
     * @return void
     * @author Tang
     * @date 2023/12/10 15:35
     **/
    void handleLoginReq(ChannelHandlerContext ctx) throws WxErrorException;

    /**
     * 用户扫码后推送
     *
     * @param code
     * @return void
     * @author Tang
     * @date 2023/12/11 10:30
     **/
    void handleScanSuccess(Integer code);

    /**
     * 处理ws连接
     *
     * @param ctx
     * @return void
     * @author Tang
     * @date 2023/12/10 15:36
     **/
    void connect(ChannelHandlerContext ctx);

    /**
     * 移除ws连接
     *
     * @param ctx
     * @return void
     * @author Tang
     * @date 2023/12/14 8:44
     **/
    void offline(ChannelHandlerContext ctx);

    /**
     * 用户扫码登录逻辑
     *
     * @param eventKey
     * @param uid
     * @return void
     * @author Tang
     * @date 2023/12/11 11:39
     **/
    void scanLoginSuccess(Integer eventKey, Long uid);

    /**
     * 认证
     *
     * @param ctx
     * @param token
     * @return void
     * @author Tang
     * @date 2023/12/22 9:54
     **/
    void authorized(ChannelHandlerContext ctx, String token);

    /**
     * 向在线的用户推送消息
     *
     * @param msg 消息
     * @author Tang
     * @date 2024/1/12 20:42
     **/
    void sendMsgToAll(WSBaseResp<?> msg);
}
